Add an image comparison utility
authorMatthias Clasen <mclasen@redhat.com>
Tue, 30 Jul 2019 18:01:11 +0000 (14:01 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 30 Jul 2019 18:02:43 +0000 (14:02 -0400)
This comes in handy sometimes, and we
already have the image diff code.

testsuite/reftests/image-compare.c [new file with mode: 0644]
testsuite/reftests/meson.build

diff --git a/testsuite/reftests/image-compare.c b/testsuite/reftests/image-compare.c
new file mode 100644 (file)
index 0000000..a69bdea
--- /dev/null
@@ -0,0 +1,63 @@
+#include "config.h"
+
+#include "reftest-compare.h"
+
+static char *opt_filename;
+static gboolean opt_quiet;
+
+int
+main (int argc, char **argv)
+{
+  cairo_surface_t *image1;
+  cairo_surface_t *image2;
+  cairo_surface_t *diff;
+  GOptionEntry entries[] = {
+    {"output", 'o', 0, G_OPTION_ARG_FILENAME, &opt_filename, "Output location", "FILE" },
+    {"quiet", 'q', 0, G_OPTION_ARG_NONE, &opt_quiet, "Don't talk", NULL },
+    { NULL, }
+  };
+  GOptionContext *context;
+  GError *error = NULL;
+
+  context = g_option_context_new ("FILE1 FILE2");
+  g_option_context_add_main_entries (context, entries, NULL);
+  if (!g_option_context_parse (context, &argc, &argv, &error))
+    {
+      if (error != NULL)
+        g_printerr ("%s\n", error->message);
+      else
+        g_printerr ("Option parse error\n");
+      exit (1);
+    }
+
+  if (argc < 3)
+    {
+      g_printerr ("Must specify two files\n");
+      exit (1);
+    }
+
+  image1 = cairo_image_surface_create_from_png (argv[1]);
+  image2 = cairo_image_surface_create_from_png (argv[2]);
+
+  diff = reftest_compare_surfaces (image1, image2);
+
+  if (opt_filename && diff)
+    cairo_surface_write_to_png (diff, opt_filename);
+
+  if (!opt_quiet)
+    {
+      if (diff)
+        {
+          if (opt_filename)
+            g_print ("Differences witten to %s.\n", opt_filename);
+          else
+            g_print ("The images are different.\n");
+        }
+      else
+        g_print ("No differences.\n");
+    }
+
+      if (!opt_quiet)
+
+  return diff != NULL ? 1 : 0;
+}
index 20c45566b6615596b3d2e92b96e83df60d71ac86..6cba6cd451101a5cfce661bb1607b0d4ac97b6a1 100644 (file)
@@ -30,6 +30,9 @@ gtk_reftest = executable('gtk-reftest', 'gtk-reftest.c',
   link_with : [libgtkreftestprivate, libreftest],
   dependencies : libgtk_dep)
 
+image_compare = executable('image-compare', 'image-compare.c',
+  link_with : [libgtkreftestprivate, libreftest],
+  dependencies : libgtk_dep)
 # Installed data (TODO)
 
 testdata = [